<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test driven development with Boost.Test</title>
<link rel="stylesheet" href="../../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../../../index.html" title="Boost.Test">
<link rel="up" href="../tutorials.html" title="Tutorials">
<link rel="prev" href="../tutorials.html" title="Tutorials">
<link rel="next" href="hello.html" title="A testing framework, what for?">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../tutorials.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tutorials.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="hello.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_test.practical_usage_recommendations.tutorials.bt_and_tdd"></a><a class="link" href="bt_and_tdd.html" title="Test driven development with Boost.Test">Test
        driven development with Boost.Test</a>
</h4></div></div></div>
<p>
          Today is a momentous day - first day of new year. Today I am going to start
          a new life. I am going to stop eating a greasy food, start attending a
          fitness club and ... today I am going to test programs I am writing. I
          can start right after the last line of a program is completed or, even
          better, I can write tests while I am coding. And maybe next time I will
          write tests before the coding, during the design stage. I have read a lot
          of literature on how to write the tests, I have the unit test framework
          in hand and an idea of new class. So let's get started.
        </p>
<p>
          Let say I want to encapsulate an unchangeable C character buffer with a
          length into the simple class <code class="computeroutput"><span class="identifier">const_string</span></code>.
          Rationale: a string class that does not allocate a memory and provide a
          convenient read-only access to the pre-allocated character buffer. I will
          probably want <code class="computeroutput"><span class="identifier">const_string</span></code>
          to have an interface similar to the class std::string. What will I do first?
          In my new life I will start with writing a test module for future class
          <code class="computeroutput"><span class="identifier">const_string</span></code>. It will look
          like this:
        </p>
<pre class="programlisting"><span class="preprocessor">#define</span> <a class="link" href="../../utf_reference/link_references/link_boost_test_module_macro.html" title="BOOST_TEST_MODULE"><code class="computeroutput"><span class="identifier">BOOST_TEST_MODULE</span></code></a> <span class="identifier">const_string</span> <span class="identifier">test</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<p>
          Now I can compile it and link with the unit test framework. Done! I have
          a working test program. It is empty, so when I run the program it produces
          following output:
        </p>
<pre class="programlisting"><span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span></pre>
<p>
          Well, now it could be a good time to start a work on <code class="computeroutput"><span class="identifier">const_string</span></code>.
          First thing I imagine would be good to have is a constructors and trivial
          access methods. So my class initial version looks like this:
        </p>
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">const_string</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="comment">// Constructors</span>
  <span class="identifier">const_string</span><span class="special">();</span>
  <span class="identifier">const_string</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">s</span> <span class="special">)</span>
  <span class="identifier">const_string</span><span class="special">(</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">s</span> <span class="special">);</span>
  <span class="identifier">const_string</span><span class="special">(</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">length</span> <span class="special">);</span>
  <span class="identifier">const_string</span><span class="special">(</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">begin</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">end</span> <span class="special">);</span>

  <span class="comment">// Access methods</span>
  <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">size_t</span>      <span class="identifier">length</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span>        <span class="identifier">is_empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">// ...</span>
<span class="special">};</span>
</pre>
<p>
          Now I am able to write a first test case - constructors testing - and add
          it to a test suite. My test program became to look like this:
        </p>
<pre class="programlisting"><span class="preprocessor">#define</span> <a class="link" href="../../utf_reference/link_references/link_boost_test_module_macro.html" title="BOOST_TEST_MODULE"><code class="computeroutput"><span class="identifier">BOOST_TEST_MODULE</span></code></a> <span class="identifier">const_string</span> <span class="identifier">test</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>

<a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_case.html" title="BOOST_AUTO_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_CASE</span></code></a><span class="special">(</span> <span class="identifier">constructors_test</span> <span class="special">)</span>
<span class="special">{</span>
  <span class="identifier">const_string</span> <span class="identifier">cs0</span><span class="special">(</span> <span class="string">""</span> <span class="special">);</span>                                                 <span class="comment">// 1 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs0</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">0</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs0</span><span class="special">.</span><span class="identifier">is_empty</span><span class="special">()</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs01</span><span class="special">(</span> <span class="identifier">NULL</span> <span class="special">);</span>                                              <span class="comment">// 2 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs01</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">0</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs01</span><span class="special">.</span><span class="identifier">is_empty</span><span class="special">()</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs1</span><span class="special">(</span> <span class="string">"test_string"</span> <span class="special">);</span>                                      <span class="comment">// 3 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strcmp</span><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="string">"test_string"</span> <span class="special">)</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strlen</span><span class="special">(</span><span class="string">"test_string"</span><span class="special">)</span> <span class="special">);</span>

  <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">(</span> <span class="string">"test_string"</span> <span class="special">);</span>                                         <span class="comment">// 4 //</span>
  <span class="identifier">const_string</span> <span class="identifier">cs2</span><span class="special">(</span> <span class="identifier">s</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strcmp</span><span class="special">(</span> <span class="identifier">cs2</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="string">"test_string"</span> <span class="special">)</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs3</span><span class="special">(</span> <span class="identifier">cs1</span> <span class="special">);</span>                                                <span class="comment">// 5 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strcmp</span><span class="special">(</span> <span class="identifier">cs3</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="string">"test_string"</span> <span class="special">)</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs4</span><span class="special">(</span> <span class="string">"test_string"</span><span class="special">,</span> <span class="number">4</span> <span class="special">);</span>                                   <span class="comment">// 6 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strncmp</span><span class="special">(</span> <span class="identifier">cs4</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="string">"test"</span><span class="special">,</span> <span class="identifier">cs4</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">)</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs5</span><span class="special">(</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">data</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">);</span>                    <span class="comment">// 7 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">strncmp</span><span class="special">(</span> <span class="identifier">cs5</span><span class="special">.</span><span class="identifier">data</span><span class="special">(),</span> <span class="string">"test_string"</span><span class="special">,</span> <span class="identifier">cs5</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">)</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span>

  <span class="identifier">const_string</span> <span class="identifier">cs_array</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="string">"str1"</span><span class="special">,</span> <span class="string">"str2"</span> <span class="special">};</span>                           <span class="comment">// 8 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs_array</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="string">"str1"</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs_array</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">==</span> <span class="string">"str2"</span> <span class="special">);</span>
<span class="special">}</span>
</pre>
<p>
          The constructors_test test case is intended to check a simple feature of
          the class <code class="computeroutput"><span class="identifier">const_string</span></code>:
          an ability to construct itself properly based on different arguments. To
          test this feature I am using such characteristics of constructed object
          as a data it contains and a length. The specification of the class <code class="computeroutput"><span class="identifier">const_string</span></code> does not contain any expected
          failures, so, though the constructor can fail if I would pass a pointer
          to an invalid memory, error check control is not performed (can't require
          what was not promised :-)). But for any valid input it should work. So
          I am trying to check a construction for an empty string (1), a NULL string
          (2) a regular C string(3), an STL string(4), a copy construction(5) and
          so on. Well, after fixing all the errors in the implementation (do you
          write programs without errors from scratch?) I am able to pass this test
          case and the unit test framework gives me the following report:
        </p>
<pre class="programlisting"><span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>

<span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
</pre>
<p>
          Encouraged I am moving on and adding more access methods:
        </p>
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">const_string</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="comment">//...</span>
  <span class="keyword">char</span> <span class="keyword">operator</span><span class="special">[](</span> <span class="identifier">size_t</span> <span class="identifier">index</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">char</span> <span class="identifier">at</span><span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">index</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="comment">//...</span>
<span class="special">};</span>
</pre>
<p>
          I added the new feature - I need a new test case to check it. As a result
          my test suite became to look like this:
        </p>
<pre class="programlisting"><span class="preprocessor">#define</span> <a class="link" href="../../utf_reference/link_references/link_boost_test_module_macro.html" title="BOOST_TEST_MODULE"><code class="computeroutput"><span class="identifier">BOOST_TEST_MODULE</span></code></a> <span class="identifier">const_string</span> <span class="identifier">test</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>

<a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_case.html" title="BOOST_AUTO_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_CASE</span></code></a><span class="special">(</span> <span class="identifier">constructors_test</span> <span class="special">)</span>
<span class="special">{</span>
  <span class="comment">//...</span>
<span class="special">}</span>

<a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_case.html" title="BOOST_AUTO_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_CASE</span></code></a><span class="special">(</span> <span class="identifier">data_access_test</span> <span class="special">)</span>
<span class="special">{</span>
  <span class="identifier">const_string</span> <span class="identifier">cs1</span><span class="special">(</span> <span class="string">"test_string"</span> <span class="special">);</span>                                <span class="comment">// 1 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">[(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="char">'t'</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">[(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">4</span><span class="special">]</span> <span class="special">==</span> <span class="char">'_'</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">[</span><span class="identifier">cs1</span><span class="special">.</span><span class="identifier">length</span><span class="special">()-</span><span class="number">1</span><span class="special">]</span> <span class="special">==</span> <span class="char">'g'</span> <span class="special">);</span>

  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">[(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">0</span><span class="special">]</span> <span class="special">==</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span> <span class="number">0</span> <span class="special">)</span> <span class="special">);</span>                      <span class="comment">// 2 //</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">[(</span><span class="identifier">size_t</span><span class="special">)</span><span class="number">2</span><span class="special">]</span> <span class="special">==</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span> <span class="number">5</span> <span class="special">)</span> <span class="special">);</span>
  <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">-</span> <span class="number">1</span> <span class="special">)</span> <span class="special">==</span> <span class="char">'g'</span> <span class="special">);</span>

  <span class="identifier">BOOST_CHECK_THROW</span><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span> <span class="identifier">cs1</span><span class="special">.</span><span class="identifier">length</span><span class="special">()</span> <span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span> <span class="special">);</span>   <span class="comment">// 3 //</span>
<span class="special">}</span>
</pre>
<p>
          In the data_access_test test case I am trying to check the class <code class="computeroutput"><span class="identifier">const_string</span></code> character access correctness.
          While tests (1) checks valid access using <code class="computeroutput"><span class="identifier">const_string</span><span class="special">::</span><span class="keyword">operator</span><span class="special">[]</span></code> and test (2) checks valid access using
          method <code class="computeroutput"><span class="identifier">const_string</span><span class="special">::</span><span class="identifier">at</span><span class="special">()</span></code>,
          there is one more thing to test. The specification of the method <code class="computeroutput"><span class="identifier">const_string</span><span class="special">::</span><span class="identifier">at</span><span class="special">()</span></code>
          contains validation for the out of bound access. That was test (3) is intended
          to do: check that the validation is working. A testing of a validation
          and error handling code is an important part of a unit testing and should
          not be left for a production stage. The data_access_test test case passed
          and I am ready for the next step.
        </p>
<p>
          Continuing my effort I am able to complete class <code class="computeroutput"><span class="identifier">const_string</span></code>
          (see <a href="../../../../snippet/const_string.hpp" target="_top">Listing 1 <code class="literal">const_string.hpp</code></a>)
          and testing module for it (see <a href="../../../../snippet/const_string_test.cpp" target="_top">Listing
          2 <code class="literal">const_string_test.cpp</code></a>) that is checking all
          features that are presented in the class <code class="computeroutput"><span class="identifier">const_string</span></code>
          specification.
        </p>
<p>
          Well, I am step closer to fulfilling my new year resolution (we should
          see about this fitness club sometime next ...). What about you? Your testing
          habits could be a little different. You could start with a class/library
          development and then at some point start writing test cases on feature
          basis. Or you can, given a detailed specification for the future product,
          including expected interfaces, immediately start with writing all test
          cases (or it could be a different person, while you working on implementation
          at the same time). In any case you should not have any problems to use
          facilities provided by the Boost.Test unit test framework and, let me hope,
          be able to write a stable, bulletproof code. And what is even more important
          is your confidence in an ability to make changes of any complexity without
          involving a lengthy regression testing of your whole product. Your test
          module and the unit test framework will stay behind your back to help you
          with any occasional errors.
        </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2001-2020 Boost.Test contributors<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../tutorials.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tutorials.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="hello.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
